import GLib from 'gi://GLib';

const main = '/tmp/ags/hyprpanel/main.js';
const entry = `${App.configDir}/main.ts`;
const bundler = GLib.getenv('AGS_BUNDLER') || 'bun';

const v = {
    ags: pkg.version?.split('.').map(Number) || [],
    expect: [1, 8, 1],
};

try {
    switch (bundler) {
        case 'bun':
            await Utils.execAsync([
                'bun',
                'build',
                entry,
                '--outfile',
                main,
                '--external',
                'resource://*',
                '--external',
                'gi://*',
                '--external',
                'file://*',
            ]);
            break;

        case 'esbuild':
            await Utils.execAsync([
                'esbuild',
                '--bundle',
                entry,
                '--format=esm',
                `--outfile=${main}`,
                '--external:resource://*',
                '--external:gi://*',
                '--external:file://*',
            ]);
            break;

        default:
            throw `"${bundler}" is not a valid bundler`;
    }

    if (v.ags[1] < v.expect[1] || v.ags[2] < v.expect[2]) {
        print(`HyprPanel needs atleast v${v.expect.join('.')} of AGS, yours is v${v.ags.join('.')}`);
        App.quit();
    }

    await import(`file://${main}`);
} catch (error) {
    console.error(error);
    App.quit();
}

export {};
